<?php
/**
 * Modelo CRUD de destinatários
 * @author Emanuel Melo e Renato Lenz @ PC4 Team
 */
class PC4_Crud_Newsletter_Telefone_Destinatario extends PC4_Crud_Newsletter_Destinatario {
	
	/**
	 * Construtor
	 */
	function __construct($tabela = 'destinatarios', $campo_contato = 'telefone') {
		parent::__construct($tabela);
	}
	
	/**
	 * Devolve o contato do destinatário
	 * @return the $campo_contato
	 */
	public function getContato($r) {
		return '(' . $r->ddd_telefone . ') ' . $r->telefone;
	}
	
	/**
	 * Verifica os campos estão corretos
	 * @param array $campos
	 * @param int $id
	 * @return array com mensagens de erros
	 */
	function valida($campos, $id = 0) {
		$erros = parent::valida($campos, $id);
		
		if (strlen($campos["contato"]) != 10) {
			$erros[] = "&Eacute; necess&aacute;rio informar um telefone v&aacute;lido.";
		}
		
		return $erros;
	}
		
	/**
	 * Altera o modo como os registros aparecerão para o usuário
	 * @param object $registro
	 * @return object de registros alterados
	 */
	function trataRegistro($registro) {
		$registro = parent::trataRegistro($registro);
		$registro->ddd_telefone = substr($registro->contato, 0, 2);
		$registro->telefone = substr($registro->contato, 2);
		
		return $registro;
	}
	
	/**
	 * Recupera os descritores das palavras chaves selecionadas pelo cliente
	 * @param int $id_cliente
	 * @param int $id_destinatario
	 */
	function getPalavrasChave($id_cliente, $id_destinatario = -1) {
		$rs = $this->db->query(
				" SELECT
				    pc.id AS 'id_palavra_chave',
				    pc.nome AS 'palavra_chave',
				    pc.caracteres,
				    tb_valor.valor
				  FROM
				    clientes_rel_palavras_chaves crpc
				    INNER JOIN palavras_chave pc
				      ON   pc.id = crpc.id_palavras_chaves
				    LEFT JOIN (
				           SELECT
				             pc2.id,
				             d.valor
				           FROM
				             descritores d
				             INNER JOIN palavras_chave pc2
				               ON   pc2.id = d.id_palavras_chaves
				           WHERE
				             d.id_destinatarios = '$id_destinatario'
				         ) tb_valor
				      ON   tb_valor.id = pc.id
				  WHERE
				    crpc.id_clientes = $id_cliente"
		)->result();
		
		return $rs;
	}
	
	/**
	 * Retorna dados necessários para montar documento excel com
	 * os destinatários e os respectivos descritores e valores de
	 * suas palavras-chave
	 * @param int $id
	 */
	function exportaExcel($id, $modelo) {
		$excel_model = new PC4_Util_Excel();
		
		$rs = $this->listaExibiveis($id, 1, -1, "0,1");

		if (!empty($rs)) {
			$r = current($rs);
			$cabecalhos = array_keys($r->descritores);
			array_unshift($cabecalhos, "telefone");
		}

		if ($modelo) {
			array_unshift($cabecalhos, "ddd_telefone");
			return $excel_model->exporta(array(), $cabecalhos, "csv");
		}

		$tabelas = "";
		$registros = array();
		foreach ($rs as $c => $r) {
			$registro = $r->descritores;
			array_unshift($registro, "(" . $r->ddd_telefone . ") " . $r->telefone);
			$registros[] = $registro;
		}
		$tabelas .= $excel_model->exporta($registros, $cabecalhos);
		
		return $tabelas;
		
	}
	
	/**
	 * Importa o arquivo excel cadastrando os destinatários
	 * @return 
	 */
	function importaExcel($arquivo, $id_cliente) {
		$descritores_model = new PC4_Crud_Newsletter_Telefone_DescritorDestinatario();
		$palavras_chave_model = new PC4_Crud_Newsletter_Telefone_PalavraChave();
		$excel_model = new PC4_Util_Excel();
		
		$r = $excel_model->importaCSV($arquivo);
		$rs = $r['rs'];
		$cabecalhos = $r['cabecalhos'];
		unset($cabecalhos[1]);
		unset($cabecalhos[0]);
		
		// Valida cabeçalhos
		$this->db->select("pc.caracteres");
		$rs_palavras = $palavras_chave_model->getPalavrasChaveCliente($id_cliente);
		
		$id_cabecalhos = array();
		foreach ($cabecalhos as $coluna => $cabecalho) {
			$ok = false;
			foreach ($rs_palavras as $palavra) {
				if ($palavra->nome == $cabecalho) {
					$id_cabecalhos[$coluna] = $palavra->id;
					$ok = true;
					break;
				}
				
			}
			if (!$ok) {
				$erros[] = "O Cabe&ccedil;alho \"$cabecalho\" n&atilde;o existe.";
			}
		}

		if (!empty($erros)) {
			return "Arquivo inv&aacute;lido. Por favor, certifique-se de que seu arquivo esteja igual ao modelo de importa&ccedil;&atilde;o.<br />Erros: " . implode("<br />", $erros);
		}
		
		$destinatarios = array();
		$descritores = array();
		
		foreach ($rs as $linha => $r) {
			$destinatarios[$linha] = array(
				'id_clientes' => $id_cliente,
				'contato' => $r[0] . $r[1]
			);
			
			$descritores[$linha] = array();
			for ($coluna = 2; $coluna < count($r); $coluna++) {
				if (!empty($r[$coluna])) {
					$descritores[$linha][] = array(
						'id_palavras_chaves' => $id_cabecalhos[$coluna],
						'valor' => $r[$coluna]
					);
				}
			}
		}

		$this->db->trans_begin();
		$ids = $this->insereVarios($destinatarios);
		
		if (!is_numeric(current($ids))) {
			return $ids;
		}

		$inserir_descritores = array();
		foreach ($ids as $linha => $id) {
			foreach ($descritores[$linha] as $descritor) {
				$descritor['id_destinatarios'] = $id;
				$inserir_descritores[] = $descritor;
			}
		}
		$erros = $descritores_model->insereVarios($inserir_descritores, 'id_destinatarios');
//d($erros);
		if (!is_numeric(current($erros))) {
		    $this->db->trans_rollback();
		    return $erros;
		}
		else {
		    $this->db->trans_commit();
		}

		return count($ids);
	}
	
}

?>